#include "gtkprivate.h"
#include "gtkspinbutton.h"
#include "gtkentry.h"
+#include "gtkeventcontrollerkey.h"
/**
const GValue *value,
GParamSpec *spec);
+static gboolean gtk_cell_renderer_spin_key_pressed (GtkEventControllerKey *controller,
+ guint keyval,
+ guint keycode,
+ GdkModifierType state,
+ GtkWidget *widget);
+
static GtkCellEditable * gtk_cell_renderer_spin_start_editing (GtkCellRenderer *cell,
GdkEvent *event,
GtkWidget *widget,
};
#define GTK_CELL_RENDERER_SPIN_PATH "gtk-cell-renderer-spin-path"
+#define GTK_CELL_RENDERER_SPIN_KEY_CONTROLLER "gtk-cell-renderer-spin-key-controller"
G_DEFINE_TYPE_WITH_PRIVATE (GtkCellRendererSpin, gtk_cell_renderer_spin, GTK_TYPE_CELL_RENDERER_TEXT)
}
static gboolean
-gtk_cell_renderer_spin_key_press_event (GtkWidget *widget,
- GdkEventKey *event,
- gpointer data)
+gtk_cell_renderer_spin_key_pressed (GtkEventControllerKey *controller,
+ guint keyval,
+ guint keycode,
+ GdkModifierType state,
+ GtkWidget *widget)
{
- guint state, keyval;
-
- if (!gdk_event_get_state ((GdkEvent *) event, &state) ||
- !gdk_event_get_keyval ((GdkEvent *) event, &keyval))
- return GDK_EVENT_PROPAGATE;
-
if (state == 0)
{
if (keyval == GDK_KEY_Up)
{
GtkCellRendererSpinPrivate *priv;
GtkCellRendererText *cell_text;
+ GtkEventController *key_controller;
GtkWidget *spin;
gboolean editable;
gchar *text;
g_free (text);
}
+ key_controller = gtk_event_controller_key_new (spin);
+ g_signal_connect (key_controller, "key-pressed",
+ G_CALLBACK (gtk_cell_renderer_spin_key_pressed),
+ spin);
+
+ g_object_set_data_full (G_OBJECT (spin), GTK_CELL_RENDERER_SPIN_KEY_CONTROLLER,
+ key_controller, g_object_unref);
g_object_set_data_full (G_OBJECT (spin), GTK_CELL_RENDERER_SPIN_PATH,
g_strdup (path), g_free);
g_signal_connect (G_OBJECT (spin), "notify::has-focus",
G_CALLBACK (gtk_cell_renderer_spin_focus_changed),
cell);
- g_signal_connect (G_OBJECT (spin), "key-press-event",
- G_CALLBACK (gtk_cell_renderer_spin_key_press_event),
- cell);
gtk_widget_show (spin);